package com.example.core.context;

import io.netty.channel.ChannelHandlerContext;

import java.util.function.Consumer;

/**
 * @Author Peng Yisheng
 * @Date 2024/11/4 17:24
 * @Description 核心上下文接口定义
 */
public interface IContext {

    int RUNNING = 0;      // 请求执行中
    int WRITTEN = 1;      // 请求结束, 写回response
    int COMPLETED = 2;    // 写回成功 (如果是Netty, ctx.WriteAndFlush(response))
    int TERMINATED = -1;  // 整个网关请求完毕, 彻底结束

    void running();       // 设置上下文状态为正常运行状态
    void written();       // 设置上下文状态为标记写回
    void completed();     // 设置上下文状态为标记写回成功
    void terminated();    // 设置上下文状态为请求结束

    boolean isRunning();
    boolean isWritten();
    boolean isCompleted();
    boolean isTerminated();

    String getProtocol();
    Object getRequest();
    Object getResponse();
    Throwable getThrowable();
    ChannelHandlerContext getNettyCtx();  // 获取Netty上下文
    boolean isKeepAlive();  // 是否保持连接

    void setRule();  // 设置请求规则
    void setResponse();
    void setThrowable(Throwable throwable);
    void setCompletedCallBack(Consumer<IContext> consumer);  // 设置回调函数

    void releaseRequest();  // 释放资源
    void invokeCompletedCallBack();  // 执行回调函数

}
